home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 109_01.zip / CONVERT.C < prev    next >
Text File  |  1993-06-26  |  3KB  |  125 lines

  1.  
  2. /*
  3.         "CONVERT"
  4.         WRITTEN BY LEOR ZOLMAN
  5.  
  6.     THIS PROGRAM CONVERTS REGULAR C SOURCE FILES INTO A 
  7.     FORMAT SUITABLE FOR EDITING ON THE TRS-80 (OR ANY
  8.     UPPER-CASE-ONLY SYSTEM.) SINCE THERE ARE QUITE A FEW
  9.     ASCII CHARACTERS THAT NEED TO BE REPRESENTED EVEN
  10.     THOUGH THEY DON'T SHOW UP ON UPPER-CASE-ONLY SYSTEMS,
  11.     A SPECIAL NOTATION HAS BEEN CREATED FOR REPRESENTING
  12.     THESE CHARACTERS. THE POUND SIGN IS USED AS A
  13.     SORT OF 'SHIFT' KEY, WITH THE LETTER FOLLOWING THE
  14.     POUND SIGN DENOTING THE SPECIAL CHARACTER NEEDED.
  15.     NOTE THAT THE C COMPILER DOES NOT RECOGNIZE THIS
  16.     SPECIAL SCHEME, AND BEFORE YOU CAN COMPILE A SOURCE
  17.     FILE CONTAINING THE SPECIAL CODES YOU MUST PREPROCESS
  18.     THE FILE USING THE "CC0T" COMMAND.
  19.  
  20.     THE SPECIAL CODES AND THE CHARACTERS THEY REPRESENT ARE:
  21.     #L    LEFT BRACKET (FOR SUBSCRIPTING) (5B HEX)
  22.     #R    RIGHT BRACKET            (5D HEX)
  23.     #C    CIRCUMFLEX (BITWISE "NOT")    (7E HEX)
  24.     #H    UP-ARROW (EXCLUSIVE "OR" OPERATOR)
  25.                         (5E HEX)
  26.     #V    VERTICAL VAR (LOGICAL AND BITWISE "OR")
  27.                         (7C HEX)
  28.     #B    BACKSLASH (FOR ESCAPE SEQUENCES)(5C HEX)
  29.     #U    UNDERSCORE            (5F HEX)
  30.  
  31.     FOR EXAMPLE, THE COMMAND
  32.         A>CONVERT FOO.C BAR.CT
  33.  
  34.     WILL EXPECT FOO.C TO BE A NORMAL C SOURCE FILE ON
  35.     DISK, AND WILL CONVERT IT INTO A FILE NAMED BAR.CT.
  36.     THE FILE BAR.CT MAY THEN BE EDITED TO YOUR TASTE,
  37.     BUT REMEMBER TO PREPROCESS IT WITH "CC0T" BEFORE
  38.     APPLYING THE C COMPILER.
  39.  
  40.     AS YOU MAY HAVE GATHERED FROM ALL THIS, THE LANGUAGE
  41.     "C" WAS NEVER INTENDED TO BE IMPLEMENTED ON A SYSTEM
  42.     HAVING UPPER-CASE ONLY; NEVERTHELESS, HERE IS A WAY
  43.     FOR IT TO BE DONE.
  44.  
  45.     THIS PROGRAM IS RATHER SIMPLE, AND THUS IT WILL NOT
  46.     RECOGNIZE THAT SPECIAL CHARACTERS IN QUOTES ARE NOT
  47.     SUPPOSED TO BE CONVERTED.
  48. */
  49.  
  50. #DEFINE LEFTCURLY 0X7B
  51. #DEFINE RIGHTCURLY 0X7D
  52. #DEFINE LEFTBRACK 0X5B
  53. #DEFINE RIGHTBRACK 0X5D
  54. #DEFINE CIRCUM 0X7E
  55. #DEFINE UPARROW 0X5E
  56. #DEFINE VERTIBAR 0X7C
  57. #DEFINE BACKSLASH 0X5C
  58. #DEFINE UNDERSCORE 0X5F
  59.  
  60. CHAR IBUF[134], OBUF[134];
  61.  
  62. MAIN(ARGC,ARGV)
  63. INT ARGC;
  64. CHAR *ARGV[];
  65. BEGIN
  66.     INT FD1, FD2;
  67.     CHAR C;
  68.     IF (ARGC != 3) BEGIN
  69.         PRINTF("USAGE: CONVERT OLD NEW <CR>\N");
  70.         EXIT();
  71.     END
  72.  
  73.     FD1 = FOPEN(ARGV[1],IBUF);
  74.     IF (FD1 == -1) BEGIN
  75.         PRINTF("NO SOURCE FILE.\N");
  76.         EXIT();
  77.     END
  78.     FD2 = FCREAT(ARGV[2],OBUF);
  79.     IF (FD2 == -1) BEGIN
  80.         PRINTF("CAN'T OPEN OUTPUT FILE.\N");
  81.         EXIT();
  82.     END
  83.  
  84.     WHILE ((( C = GETC(IBUF)) != 0X1A) && C != 255) BEGIN
  85.         SWITCH (C) BEGIN
  86.          CASE LEFTCURLY: PUTST(" BEGIN ");
  87.                 BREAK;
  88.          CASE RIGHTCURLY: PUTST(" END ");
  89.                  BREAK;
  90.          CASE LEFTBRACK: PUTSPEC('L');
  91.                 BREAK;
  92.          CASE RIGHTBRACK: PUTSPEC('R');
  93.                 BREAK;
  94.          CASE CIRCUM: PUTSPEC('C');
  95.                 BREAK;
  96.          CASE UPARROW: PUTSPEC('U');
  97.                 BREAK;
  98.          CASE VERTIBAR: PUTSPEC('V');
  99.                 BREAK;
  100.          CASE BACKSLASH: PUTSPEC('B');
  101.                 BREAK;
  102.          CASE UNDERSCORE: PUTSPEC('U');
  103.                 BREAK;
  104.          DEFAULT: PUTC(TOUPPER(C),OBUF);
  105.         END
  106.     END
  107.  
  108.     IF (C==255) C = 0X1A;  /* DIGITAL RESEARCH....WOW. */
  109.     PUTC(C,OBUF);
  110.     FFLUSH(OBUF);
  111. END
  112.  
  113. PUTST(STRING)
  114. CHAR *STRING;
  115. BEGIN
  116.     WHILE (*STRING) PUTC(*STRING++,OBUF);
  117. END
  118.  
  119. PUTSPEC(C)
  120. CHAR C;
  121. BEGIN
  122.     PUTC('#',OBUF);
  123.     PUTC(C,OBUF);
  124. END
  125.